package com.wbw.init;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

@Component
public class Test2 {

    // @Resource是java中的注解，按名称给组件注入bean，若有多个则报错，可通过type属性或name属性解决
    // @Autowired是spring中的注解，按类型装配，若有多个，则按名称装，名称找不到，则报错，可通过@Qualifier或@Primary解决
    // 用于自动装配，即依赖注入，Spring容器会自动帮助我们创建一个 Job类型的Bean 并注入Test2类这个组件中，
    // 即在Test2类中注入了Job类，这样就可以在Test2中使用Job类的方法了

    // 注入的是Job1，因为Job1上有@Primary注解
    @Autowired(required = false) //有就注入，没有就不注
    Job job;

    // 先按类型匹配到两个，若两个上都无@Primary，再按名称匹配到Job2
    @Autowired
    Job job2;

    // 按名称找Job1，赋值给job3
    @Autowired
    @Qualifier("job1")
    Job job3;

    //根据@order(1)属性,Job2赋值给该jobList中0索引
    @Autowired
    List<Job> jobList;

    @Resource //javax中的注解，默认按名称找，找不到按类型找
    Map<String, Job> jobMap;

    // @Value("#{其他bean.属性}")
    // @Value("#{systemProperties['os.name']}") 注入系统属性
    // @Value("hello world")  直接给属性赋值
    @Value("${my.name:wbw2}") //获取配置文件的属性值赋值给url 如果找不到，赋值wbw2
    private String url;

    public Test2(){
        System.out.println("test2实例化完成");
    }

    public void test() {
//        jobMap.keySet().forEach(i->{
//            if (i.contains("job1")){
//                jobMap.get(i).doJob();
//            }
//        });
//        jobList.get(0).doJob();
//        job3.doJob();
        job.doJob();
    }


}
